// 这是一个用于测试ESLint规则的文件

// -----------------------------------------------------
// 1. 变量相关规则测试
// -----------------------------------------------------

// 测试 no-var
const shouldUseConst = 'test' // 应使用const而非var

// 测试 prefer-const
const shouldBeConst = 'never changes' // 应使用const而非let

// 测试 no-const-assign
const constValue = 'cannot change'
// constValue = 'try to change' // 会导致错误：禁止修改const声明的变量

// 测试 @typescript-eslint/no-unused-vars
const _ignored = 'this variable is ignored by rule' // 应被忽略
const notIgnored = 'this variable is not used' // 应报错

// -----------------------------------------------------
// 2. 函数相关规则测试
// -----------------------------------------------------

// 测试 arrow-body-style
const simpleArrow = (x: number) => x * 2 // 应简化为 x => x * 2
const complexArrow = (x: number) => {
  const result = x * 2
  return result
}

// 测试 arrow-parens
const withUnnecessaryParens = (x: number) => x * 2 // 应简化为 x => x * 2

// 测试 no-empty-function
function emptyFn() {} // 应报警告

// 测试 no-return-await
async function unnecessaryAwait() {
  return await fetch('https://example.com') // 应直接return fetch
}

// -----------------------------------------------------
// 3. 代码风格规则测试
// -----------------------------------------------------

// 测试 curly
if (true) console.warn('should use curly braces') // 多行应使用花括号

// 测试 brace-style
function wrongStyle() {
  return true // 大括号应在同一行
}

// 测试 semi
const noSemi = 'should not have semi' // 不应有分号

// 测试 quotes
const wrongQuotes = 'should use single quotes' // 应使用单引号

// 测试 quote-props
const obj = {
  unnecessaryQuotes: true, // 不需要引号
  'user-id': 123 // 特殊属性需要引号
}

// -----------------------------------------------------
// 4. TypeScript特定规则测试
// -----------------------------------------------------

// 测试 @typescript-eslint/no-explicit-any
function takesAny(param: any) {
  // 应避免使用any
  return param
}

// 测试 @typescript-eslint/type-annotation-spacing
function wrongSpacing(param: string): number {
  // 冒号后应有空格
  return param.length
}

// -----------------------------------------------------
// 5. 控制台和调试规则测试
// -----------------------------------------------------

// 测试 no-console
console.log('普通日志') // 应警告
console.info('信息日志') // 应警告
console.warn('警告日志') // 允许
console.error('错误日志') // 允许

// 测试 no-debugger
// debugger; // 应警告

// -----------------------------------------------------
// 6. 最佳实践规则测试
// -----------------------------------------------------

// 测试 no-duplicate-imports
import { ref } from 'vue'
import { computed } from 'vue' // 应合并导入

// 测试 no-useless-constructor
class UselessConstructor {
  constructor() {} // 不必要的构造函数
}

// 测试 prefer-template
const name = 'world'
const greeting = `Hello ${name}!` // 应使用模板字符串

// 测试 prefer-destructuring
const user = { firstName: 'John', lastName: 'Doe' }
const { firstName } = user // 应使用解构赋值
const { lastName } = user // 应使用解构赋值

const colors = ['red', 'green', 'blue']
const red = colors[0] // 应使用解构赋值
